Index: formatted_number.module
===================================================================
RCS file: /cvs/drupal/contributions/modules/formatted_number/Attic/formatted_number.module,v
retrieving revision 1.1.2.5
diff -u -p -r1.1.2.5 formatted_number.module
--- formatted_number.module	20 May 2009 07:21:36 -0000	1.1.2.5
+++ formatted_number.module	17 Sep 2009 18:08:53 -0000
@@ -43,12 +43,22 @@ function formatted_number_init() {
  * Implementation of hook_theme().
  */
 function formatted_number_theme() {
-  return array(
+  $theme_hooks = array(
     'formatted_number' => array('arguments' => array('element' => NULL)),
     'formatted_number_formatter_default' => array('arguments' => array('element' => NULL), 'function' => 'theme_formatted_number_formatter_generic'),
     'formatted_number_formatter_nozeros' => array('arguments' => array('element' => NULL), 'function' => 'theme_formatted_number_formatter_generic'),
     'formatted_number_formatter_unformatted' => array('arguments' => array('element' => NULL)),
   );
+
+  // Theme functions for the dp and sf formatters.
+  foreach (formatted_number_decimal_place_formatter_lengths() as $dp) {
+    $theme_hooks["formatted_number_formatter_{$dp}dp"] = array('arguments' => array('element' => NULL), 'function' => 'theme_formatted_number_formatter_rounded');
+  }
+  foreach (formatted_number_significant_figure_formatter_lengths() as $sf) {
+    $theme_hooks["formatted_number_formatter_{$sf}sf"] = array('arguments' => array('element' => NULL), 'function' => 'theme_formatted_number_formatter_rounded');
+  }
+
+  return $theme_hooks;
 }
 
 /**
@@ -336,11 +346,41 @@ function formatted_number_field($op, &$n
 function formatted_number_field_formatter_info() {
   $all_field_types = array_keys(formatted_number_get_fields_info());
   $real_field_types = array_keys(formatted_number_get_fields_info('real'));
-  return array(
+  $formatters = array(
     'default' => array('label' => t('Default'), 'field types' => $all_field_types),
     'nozeros' => array('label' => t('Remove redundant zeros'), 'field types' => $real_field_types),
     'unformatted' => array('label' => t('Unformatted'), 'field types' => $all_field_types),
   );
+
+  // Decimal place and significant figure formatters.
+  foreach (formatted_number_decimal_place_formatter_lengths() as $dp) {
+    $formatters["{$dp}dp"] = array('label' => t('!dp decimal places', array('!dp' => $dp)), 'field types' => $real_field_types);
+  }
+  foreach (formatted_number_significant_figure_formatter_lengths() as $sf) {
+    $formatters["{$sf}sf"] = array('label' => t('!sf significant figures', array('!sf' => $sf)), 'field types' => $real_field_types);
+  }
+
+  return $formatters;
+}
+
+/**
+ * Gets the lengths for the decimal place formatters.
+ *
+ * @return array
+ *   Integers of dp lengths.
+ */
+function formatted_number_decimal_place_formatter_lengths() {
+  return variable_get('formatted_number_decimal_place_formatter_lengths', array(0, 1, 2));
+}
+
+/**
+ * Gets the lengths for the significant place formatters.
+ *
+ * @return array
+ *   Integers of sf lengths.
+ */
+function formatted_number_significant_figure_formatter_lengths() {
+  return variable_get('formatted_number_significant_figure_formatter_lengths', array(1, 2, 3, 4));
 }
 
 /**
@@ -603,3 +643,18 @@ function theme_formatted_number_formatte
 
   return $prefix . $formatted_number . $suffix;
 }
+
+/**
+ * Display a formatted number rounded by decimal places or significant figures.
+ *
+ * @ingroup themeable
+ */
+function theme_formatted_number_formatter_rounded($element) {
+  $places = substr($element['#formatter'], -3, 1);
+  if (substr($element['#formatter'], -2) == 'sf') {
+    return format_number_significant_figures($element['#item']['value'], $places);
+  }
+  else {
+    return format_number($element['#item']['value'], $places);
+  }
+}
